package com.ivideo.avcore.rtmplive

/**
 * RTMP推流工具类
 * 提供与C++层的JNI接口
 */
class RtmpUtils {
    companion object {
        // 加载native库
        init {
            System.loadLibrary("avcore")
        }

        /**
         * 初始化RTMP连接
         * @param url RTMP服务器地址
         * @param width 视频宽度
         * @param height 视频高度
         * @param timeOut 超时时间
         * @return C++对象指针
         */
        @JvmStatic
        external fun init(url: String, width: Int, height: Int, timeOut: Int): Long

        /**
         * 发送SPS和PPS数据
         * @param cptr C++对象指针
         * @param sps SPS数据
         * @param spsLen SPS长度
         * @param pps PPS数据
         * @param ppsLen PPS长度
         * @param timestamp 时间戳
         * @return 发送结果
         */
        @JvmStatic
        external fun sendSpsAndPps(
            cptr: Long,
            sps: ByteArray,
            spsLen: Int,
            pps: ByteArray,
            ppsLen: Int,
            timestamp: Long
        ): Int

        /**
         * 发送视频数据
         * @param cptr C++对象指针
         * @param data 视频数据
         * @param len 数据长度
         * @param timestamp 时间戳
         * @return 发送结果
         */
        @JvmStatic
        external fun sendVideoData(cptr: Long, data: ByteArray, len: Int, timestamp: Long): Int

        /**
         * 发送AAC配置信息
         * @param cptr C++对象指针
         * @param data AAC配置数据
         * @param len 数据长度
         * @return 发送结果
         */
        @JvmStatic
        external fun sendAacSpec(cptr: Long, data: ByteArray, len: Int): Int

        /**
         * 发送AAC音频数据
         * @param cptr C++对象指针
         * @param data AAC音频数据
         * @param len 数据长度
         * @param timestamp 时间戳
         * @return 发送结果
         */
        @JvmStatic
        external fun sendAacData(cptr: Long, data: ByteArray, len: Int, timestamp: Long): Int

        /**
         * 停止推流并释放资源
         * @param cptr C++对象指针
         * @return 操作结果
         */
        @JvmStatic
        external fun stop(cptr: Long): Int
    }
} 